<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>单例模式</title>
</head>
<body>
  <script>
    // 一个类只能存在一个实例

    // 如果实例不存在那么就new一个，如果已经存在了就把上一次new的那个直接返回
    
    class Persident {
      constructor (name, age) {
        this.name = name
        this.age = age
      }
    }

    
    // 利用IIFE+closure 实现单例模式
    // 懒汉单例：先空着，需要的时候再通过判断决定是否需要new
    // var getPresident = (function () {
    //   var instance = null
    //   return function (name, age) {
    //     if (instance === null) {
    //       // 实例不存在
    //       instance = new Persident(name, age)
    //     }
    //     return instance
    //   }
    // })()
    

    // var pre1 = getPresident('chuanpu', 70)
    // var pre2 = getPresident('dary', 19)
    // console.log({ pre1, pre2 })
    // console.log(pre1 === pre2)

    // 饿汉单例：提前new好，调用的时候直接返回即可
    var getPresident = (function () {
      var instance = new Persident('chaunpu', 70)
      return function () {
        return instance
      }
    })()

    var pre1 = getPresident()
    var pre2 = getPresident()
    console.log({ pre1, pre2 })
    console.log(pre1 === pre2)

  </script>
</body>
</html>